package com.carrental.integration.client;

import com.carrental.integration.config.FeignConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 百度地图API的Feign客户端接口
 * 用于调用百度地图的相关API
 */
@FeignClient(name = "baidu-map", url = "${third-party.map.baidu.base-url}", configuration = FeignConfig.class)
public interface BaiduMapClient {

    /**
     * 地理编码API，将地址信息转换为经纬度坐标
     * @param address 地址信息
     * @param output 输出格式，默认为json
     * @param ak 百度地图API密钥
     * @return 地理编码结果
     */
    @GetMapping("/geocoding/v3")
    String geocoding(@RequestParam("address") String address,
                     @RequestParam("output") String output,
                     @RequestParam("ak") String ak);

    /**
     * 逆地理编码API，将经纬度坐标转换为地址信息
     * @param location 经纬度坐标，格式为"纬度,经度"
     * @param output 输出格式，默认为json
     * @param ak 百度地图API密钥
     * @return 逆地理编码结果
     */
    @GetMapping("/reverse_geocoding/v3")
    String reverseGeocoding(@RequestParam("location") String location,
                            @RequestParam("output") String output,
                            @RequestParam("ak") String ak);

    /**
     * 路径规划API，计算两点间的驾车路线
     * @param origin 起点经纬度，格式为"纬度,经度"
     * @param destination 终点经纬度，格式为"纬度,经度"
     * @param output 输出格式，默认为json
     * @param ak 百度地图API密钥
     * @return 路径规划结果
     */
    @GetMapping("/direction/v2/driving")
    String drivingDirection(@RequestParam("origin") String origin,
                            @RequestParam("destination") String destination,
                            @RequestParam("output") String output,
                            @RequestParam("ak") String ak);

    /**
     * 地点检索API，根据关键字检索地点
     * @param query 检索关键字
     * @param region 检索区域
     * @param output 输出格式，默认为json
     * @param ak 百度地图API密钥
     * @return 地点检索结果
     */
    @GetMapping("/place/v2/search")
    String placeSearch(@RequestParam("query") String query,
                       @RequestParam("region") String region,
                       @RequestParam("output") String output,
                       @RequestParam("ak") String ak);
} 